home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 January: Mac OS SDK / Dev.CD Jan 99 SDK2.toast / Development Kits / QuickTime / QuickTime 3 Interfaces & Libs / QTDevWin / CIncludes / DatabaseAccess.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-21  |  13.0 KB  |  370 lines  |  [TEXT/dosa]

  1. /*
  2.      File:        DatabaseAccess.h
  3.  
  4.      Contains:    Database Access Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    QuickTime 3.0
  8.  
  9.      Copyright:    © 1989-1998, 1995-1997 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. */
  18. #ifndef __DATABASEACCESS__
  19. #define __DATABASEACCESS__
  20.  
  21. #ifndef __RESOURCES__
  22. #include <Resources.h>
  23. #endif
  24.  
  25.  
  26.  
  27. #if PRAGMA_ONCE
  28. #pragma once
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_STRUCT_ALIGN
  40.     #pragma options align=mac68k
  41. #elif PRAGMA_STRUCT_PACKPUSH
  42.     #pragma pack(push, 2)
  43. #elif PRAGMA_STRUCT_PACK
  44.     #pragma pack(2)
  45. #endif
  46.  
  47. /* data type codes */
  48.  
  49. enum {
  50.     typeNone                    = FOUR_CHAR_CODE('none'),
  51.     typeDate                    = FOUR_CHAR_CODE('date'),
  52.     typeTime                    = FOUR_CHAR_CODE('time'),
  53.     typeTimeStamp                = FOUR_CHAR_CODE('tims'),
  54.     typeDecimal                    = FOUR_CHAR_CODE('deci'),
  55.     typeMoney                    = FOUR_CHAR_CODE('mone'),
  56.     typeVChar                    = FOUR_CHAR_CODE('vcha'),
  57.     typeVBin                    = FOUR_CHAR_CODE('vbin'),
  58.     typeLChar                    = FOUR_CHAR_CODE('lcha'),
  59.     typeLBin                    = FOUR_CHAR_CODE('lbin'),
  60.     typeDiscard                    = FOUR_CHAR_CODE('disc'),        /* "dummy" types for DBResultsToText */
  61.     typeUnknown                    = FOUR_CHAR_CODE('unkn'),
  62.     typeColBreak                = FOUR_CHAR_CODE('colb'),
  63.     typeRowBreak                = FOUR_CHAR_CODE('rowb'),        /* pass this in to DBGetItem for any data type */
  64.     typeAnyType                    = 0
  65. };
  66.  
  67. /* infinite timeout value for DBGetItem */
  68.  
  69. enum {
  70.                                                                 /* messages for status functions for DBStartQuery */
  71.     kDBUpdateWind                = 0,
  72.     kDBAboutToInit                = 1,
  73.     kDBInitComplete                = 2,
  74.     kDBSendComplete                = 3,
  75.     kDBExecComplete                = 4,
  76.     kDBStartQueryComplete        = 5
  77. };
  78.  
  79.  
  80. enum {
  81.                                                                 /* messages for status functions for DBGetQueryResults */
  82.     kDBGetItemComplete            = 6,
  83.     kDBGetQueryResultsComplete    = 7,
  84.     kDBWaitForever                = -1
  85. };
  86.  
  87.  
  88. enum {
  89.                                                                 /*  flags for DBGetItem  */
  90.     kDBLastColFlag                = 0x0001,
  91.     kDBNullFlag                    = 0x0004
  92. };
  93.  
  94. typedef OSType                             DBType;
  95. typedef struct DBAsyncParamBlockRec     DBAsyncParamBlockRec;
  96. typedef DBAsyncParamBlockRec *            DBAsyncParmBlkPtr;
  97. typedef CALLBACK_API( void , DBCompletionProcPtr )(DBAsyncParmBlkPtr pb);
  98. /*
  99.     WARNING: DBCompletionProcPtr uses register based parameters under classic 68k
  100.              and cannot be written in a high-level language without 
  101.              the help of mixed mode or assembly glue.
  102. */
  103. typedef REGISTER_UPP_TYPE(DBCompletionProcPtr)                     DBCompletionUPP;
  104. /* structure for asynchronous parameter block */
  105.  
  106. struct DBAsyncParamBlockRec {
  107.     DBCompletionUPP                 completionProc;                /* pointer to completion routine */
  108.     OSErr                             result;                        /* result of call */
  109.     long                             userRef;                    /* for application's use */
  110.     long                             ddevRef;                    /* for ddev's use */
  111.     long                             reserved;                    /* for internal use */
  112. };
  113.  
  114. /* structure for resource list in QueryRecord */
  115.  
  116. struct ResListElem {
  117.     ResType                         theType;                    /* resource type */
  118.     short                             id;                            /* resource id */
  119. };
  120. typedef struct ResListElem                ResListElem;
  121.  
  122. typedef ResListElem *                    ResListPtr;
  123. typedef ResListPtr *                    ResListHandle;
  124. /* structure for query list in QueryRecord */
  125. typedef Handle                             QueryArray[256];
  126. typedef Handle *                        QueryListPtr;
  127. typedef QueryListPtr *                    QueryListHandle;
  128.  
  129. struct QueryRecord {
  130.     short                             version;                    /* version */
  131.     short                             id;                            /* id of 'qrsc' this came from */
  132.     Handle                             queryProc;                    /* handle to query def proc */
  133.     Str63                             ddevName;                    /* ddev name */
  134.     Str255                             host;                        /* host name */
  135.     Str255                             user;                        /* user name */
  136.     Str255                             password;                    /* password */
  137.     Str255                             connStr;                    /* connection string */
  138.     short                             currQuery;                    /* index of current query */
  139.     short                             numQueries;                    /* number of queries in list */
  140.     QueryListHandle                 queryList;                    /* handle to array of handles to text */
  141.     short                             numRes;                        /* number of resources in list */
  142.     ResListHandle                     resList;                    /* handle to array of resource list elements */
  143.     Handle                             dataHandle;                    /* for use by query def proc */
  144.     long                             refCon;                        /* for use by application */
  145. };
  146. typedef struct QueryRecord                QueryRecord;
  147.  
  148. typedef QueryRecord *                    QueryPtr;
  149. typedef QueryPtr *                        QueryHandle;
  150. /* structure of column types array in ResultsRecord */
  151. typedef DBType                             ColTypesArray[256];
  152. typedef Handle                             ColTypesHandle;
  153. /* structure for column info in ResultsRecord */
  154.  
  155. struct DBColInfoRecord {
  156.     short                             len;
  157.     short                             places;
  158.     short                             flags;
  159. };
  160. typedef struct DBColInfoRecord            DBColInfoRecord;
  161.  
  162. typedef DBColInfoRecord                 ColInfoArray[256];
  163. typedef Handle                             ColInfoHandle;
  164. /* structure of results returned by DBGetResults */
  165.  
  166. struct ResultsRecord {
  167.     short                             numRows;                    /* number of rows in result */
  168.     short                             numCols;                    /* number of columns per row */
  169.     ColTypesHandle                     colTypes;                    /* data type array */
  170.     Handle                             colData;                    /* actual results */
  171.     ColInfoHandle                     colInfo;                    /* DBColInfoRecord array */
  172. };
  173. typedef struct ResultsRecord            ResultsRecord;
  174.  
  175. enum {
  176.                                                                 /* messages sent to a 'ddev'*/
  177.     kDBInit                        = 0,
  178.     kDBEnd                        = 1,
  179.     kDBGetConnInfo                = 2,
  180.     kDBGetSessionNum            = 3,
  181.     kDBSend                        = 4,
  182.     kDBSendItem                    = 5,
  183.     kDBExec                        = 6,
  184.     kDBState                    = 7,
  185.     kDBGetErr                    = 8,
  186.     kDBBreak                    = 9,
  187.     kDBGetItem                    = 10,
  188.     kDBUngetItem                = 11,
  189.     kDBKill                        = 12,
  190.     kDBOpen                        = 100,
  191.     kDBClose                    = 101,
  192.     kDBIdle                        = 102
  193. };
  194.  
  195. typedef CALLBACK_API( OSErr , DBQueryDefProcPtr )(long *sessID, QueryHandle query);
  196. typedef CALLBACK_API( Boolean , DBStatusProcPtr )(short message, OSErr result, short dataLen, short dataPlaces, short dataFlags, DBType dataType, Ptr dataPtr);
  197. typedef CALLBACK_API( OSErr , DBResultHandlerProcPtr )(DBType dataType, short theLen, short thePlaces, short theFlags, Ptr theData, Handle theText);
  198. typedef STACK_UPP_TYPE(DBQueryDefProcPtr)                         DBQueryDefUPP;
  199. typedef STACK_UPP_TYPE(DBStatusProcPtr)                         DBStatusUPP;
  200. typedef STACK_UPP_TYPE(DBResultHandlerProcPtr)                     DBResultHandlerUPP;
  201. enum { uppDBCompletionProcInfo = 0x0000B802 };                     /* register no_return_value Func(4_bytes:A1) */
  202. enum { uppDBQueryDefProcInfo = 0x000003E0 };                     /* pascal 2_bytes Func(4_bytes, 4_bytes) */
  203. enum { uppDBStatusProcInfo = 0x000FAA90 };                         /* pascal 1_byte Func(2_bytes, 2_bytes, 2_bytes, 2_bytes, 2_bytes, 4_bytes, 4_bytes) */
  204. enum { uppDBResultHandlerProcInfo = 0x0003EAE0 };                 /* pascal 2_bytes Func(4_bytes, 2_bytes, 2_bytes, 2_bytes, 4_bytes, 4_bytes) */
  205. #define NewDBCompletionProc(userRoutine)                         (DBCompletionUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBCompletionProcInfo, GetCurrentArchitecture())
  206. #define NewDBQueryDefProc(userRoutine)                             (DBQueryDefUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBQueryDefProcInfo, GetCurrentArchitecture())
  207. #define NewDBStatusProc(userRoutine)                             (DBStatusUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBStatusProcInfo, GetCurrentArchitecture())
  208. #define NewDBResultHandlerProc(userRoutine)                     (DBResultHandlerUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDBResultHandlerProcInfo, GetCurrentArchitecture())
  209. #if TARGET_OS_MAC && TARGET_CPU_68K && !TARGET_RT_MAC_CFM
  210.     #pragma parameter CallDBCompletionProc(__A0, __A1)
  211.     void CallDBCompletionProc(DBCompletionUPP routine, DBAsyncParmBlkPtr pb) = 0x4E90;
  212. #else
  213.     #define CallDBCompletionProc(userRoutine, pb)                 CALL_ONE_PARAMETER_UPP((userRoutine), uppDBCompletionProcInfo, (pb))
  214. #endif
  215. #define CallDBQueryDefProc(userRoutine, sessID, query)             CALL_TWO_PARAMETER_UPP((userRoutine), uppDBQueryDefProcInfo, (sessID), (query))
  216. #define CallDBStatusProc(userRoutine, message, result, dataLen, dataPlaces, dataFlags, dataType, dataPtr)  CALL_SEVEN_PARAMETER_UPP((userRoutine), uppDBStatusProcInfo, (message), (result), (dataLen), (dataPlaces), (dataFlags), (dataType), (dataPtr))
  217. #define CallDBResultHandlerProc(userRoutine, dataType, theLen, thePlaces, theFlags, theData, theText)  CALL_SIX_PARAMETER_UPP((userRoutine), uppDBResultHandlerProcInfo, (dataType), (theLen), (thePlaces), (theFlags), (theData), (theText))
  218. EXTERN_API( OSErr )
  219. InitDBPack                        (void)                                                        FIVEWORDINLINE(0x3F3C, 0x0004, 0x303C, 0x0100, 0xA82F);
  220.  
  221. EXTERN_API( OSErr )
  222. DBInit                            (long *                    sessID,
  223.                                  ConstStr63Param         ddevName,
  224.                                  ConstStr255Param         host,
  225.                                  ConstStr255Param         user,
  226.                                  ConstStr255Param         passwd,
  227.                                  ConstStr255Param         connStr,
  228.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0E02, 0xA82F);
  229.  
  230. EXTERN_API( OSErr )
  231. DBEnd                            (long                     sessID,
  232.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0403, 0xA82F);
  233.  
  234. EXTERN_API( OSErr )
  235. DBGetConnInfo                    (long                     sessID,
  236.                                  short                     sessNum,
  237.                                  long *                    returnedID,
  238.                                  long *                    version,
  239.                                  Str63                     ddevName,
  240.                                  Str255                 host,
  241.                                  Str255                 user,
  242.                                  Str255                 network,
  243.                                  Str255                 connStr,
  244.                                  long *                    start,
  245.                                  OSErr *                state,
  246.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x1704, 0xA82F);
  247.  
  248. EXTERN_API( OSErr )
  249. DBGetSessionNum                    (long                     sessID,
  250.                                  short *                sessNum,
  251.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0605, 0xA82F);
  252.  
  253. EXTERN_API( OSErr )
  254. DBSend                            (long                     sessID,
  255.                                  Ptr                     text,
  256.                                  short                     len,
  257.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0706, 0xA82F);
  258.  
  259. EXTERN_API( OSErr )
  260. DBSendItem                        (long                     sessID,
  261.                                  DBType                 dataType,
  262.                                  short                     len,
  263.                                  short                     places,
  264.                                  short                     flags,
  265.                                  void *                    buffer,
  266.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0B07, 0xA82F);
  267.  
  268. EXTERN_API( OSErr )
  269. DBExec                            (long                     sessID,
  270.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0408, 0xA82F);
  271.  
  272. EXTERN_API( OSErr )
  273. DBState                            (long                     sessID,
  274.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0409, 0xA82F);
  275.  
  276. EXTERN_API( OSErr )
  277. DBGetErr                        (long                     sessID,
  278.                                  long *                    err1,
  279.                                  long *                    err2,
  280.                                  Str255                 item1,
  281.                                  Str255                 item2,
  282.                                  Str255                 errorMsg,
  283.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0E0A, 0xA82F);
  284.  
  285. EXTERN_API( OSErr )
  286. DBBreak                            (long                     sessID,
  287.                                  Boolean                 abort,
  288.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x050B, 0xA82F);
  289.  
  290. EXTERN_API( OSErr )
  291. DBGetItem                        (long                     sessID,
  292.                                  long                     timeout,
  293.                                  DBType *                dataType,
  294.                                  short *                len,
  295.                                  short *                places,
  296.                                  short *                flags,
  297.                                  void *                    buffer,
  298.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x100C, 0xA82F);
  299.  
  300. EXTERN_API( OSErr )
  301. DBUnGetItem                        (long                     sessID,
  302.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x040D, 0xA82F);
  303.  
  304. EXTERN_API( OSErr )
  305. DBKill                            (DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x020E, 0xA82F);
  306.  
  307. EXTERN_API( OSErr )
  308. DBGetNewQuery                    (short                     queryID,
  309.                                  QueryHandle *            query)                                THREEWORDINLINE(0x303C, 0x030F, 0xA82F);
  310.  
  311. EXTERN_API( OSErr )
  312. DBDisposeQuery                    (QueryHandle             query)                                THREEWORDINLINE(0x303C, 0x0210, 0xA82F);
  313.  
  314. EXTERN_API( OSErr )
  315. DBStartQuery                    (long *                    sessID,
  316.                                  QueryHandle             query,
  317.                                  DBStatusUPP             statusProc,
  318.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0811, 0xA82F);
  319.  
  320. EXTERN_API( OSErr )
  321. DBGetQueryResults                (long                     sessID,
  322.                                  ResultsRecord *        results,
  323.                                  long                     timeout,
  324.                                  DBStatusUPP             statusProc,
  325.                                  DBAsyncParmBlkPtr         asyncPB)                            THREEWORDINLINE(0x303C, 0x0A12, 0xA82F);
  326.  
  327. EXTERN_API( OSErr )
  328. DBResultsToText                    (ResultsRecord *        results,
  329.                                  Handle *                theText)                            THREEWORDINLINE(0x303C, 0x0413, 0xA82F);
  330.  
  331. EXTERN_API( OSErr )
  332. DBInstallResultHandler            (DBType                 dataType,
  333.                                  DBResultHandlerUPP     theHandler,
  334.                                  Boolean                 isSysHandler)                        THREEWORDINLINE(0x303C, 0x0514, 0xA82F);
  335.  
  336. EXTERN_API( OSErr )
  337. DBRemoveResultHandler            (DBType                 dataType)                            THREEWORDINLINE(0x303C, 0x0215, 0xA82F);
  338.  
  339. EXTERN_API( OSErr )
  340. DBGetResultHandler                (DBType                 dataType,
  341.                                  DBResultHandlerUPP *    theHandler,
  342.                                  Boolean                 getSysHandler)                        THREEWORDINLINE(0x303C, 0x0516, 0xA82F);
  343.  
  344. EXTERN_API( OSErr )
  345. DBIdle                            (void)                                                        THREEWORDINLINE(0x303C, 0x00FF, 0xA82F);
  346.  
  347.  
  348.  
  349.  
  350. #if PRAGMA_STRUCT_ALIGN
  351.     #pragma options align=reset
  352. #elif PRAGMA_STRUCT_PACKPUSH
  353.     #pragma pack(pop)
  354. #elif PRAGMA_STRUCT_PACK
  355.     #pragma pack()
  356. #endif
  357.  
  358. #ifdef PRAGMA_IMPORT_OFF
  359. #pragma import off
  360. #elif PRAGMA_IMPORT
  361. #pragma import reset
  362. #endif
  363.  
  364. #ifdef __cplusplus
  365. }
  366. #endif
  367.  
  368. #endif /* __DATABASEACCESS__ */
  369.  
  370.